草庐IT

C++ 指向 vector 的指针

全部标签

c++ - 是否可以使用填充构造函数创建 std::vector<std::unique_ptr<Bar>> ?

我有一个Foo类,其成员变量类型为std::vector>,我想填写这个类的构造函数的初始化列表。这可能吗?我希望可以使用vector的填充构造函数,就像这样Foo::Foo(intn):vector>(n,unique_ptr(newBar)){}但我认为这需要std::unique_ptr的复制构造函数,它被删除了(因为它应该被删除)(unique_ptr(constunique_ptr&)=delete)。有没有更好的方法来解决这个问题? 最佳答案 既然不可复制,那就搬吧!硬编码对象的解决方案:#include#include

c++ - 指向成员函数语法的奇怪指针

我了解如何声明函数的类型:typedefvoid(typedef_void_f)();//typedef_void_fisvoid()usingalias_void_f=void();//alias_void_fisvoid()它可以用来声明函数指针:voidfunction(){std::cout对于成员函数指针,语法稍微复杂一些:structS{voidfunction(){std::cout这是我对C++中函数指针的理解,我认为这已经足够了。但是在p0172r0technicalpaper我发现了一个我不熟悉的语法:structhost{intfunction()const;};

c++ - 从 const 指针创建用户类的 const 对象

是否可以强制编译器在我的类中传播常量限定符,以便为构造函数提供常量指针?考虑以下代码:structT{T(int*a,int*b):a(a),b(b){}int*a;int*b;};inta=1,b=2;constint*aRef=&a;constint*bRef=&b;constTobj(aRef,bRef);//error这显然是不允许的,因为构造函数接受int*,而不是constint*。有什么方法可以达到同样的效果,如果不打算修改const对象中的a和b处的数据类T?编辑下面是一个更接近实际问题的稍微复杂的例子。想象一下,我按顺序传递了一些大型int[]数组(例如,连续1000

c++ SFINAE 检查指向类的指针中的方法

我有这样的代码:templateclassDiskFileFlush{TABLELOADER*_loader;public:voidprocess(){//Iwanttocallthis,//onlyifloader->refresh()exists.notifyLoader();}boolnotifyLoader(){if(loader!=nullptr)returnloader->refresh();returnfalse;}};只有loader->refresh()存在时,我才想调用notifyLoader()。我也使用void作为默认类型,有没有更好的方法来做同样的事情?

c++ - 指向数据结构中元素的指针安全吗? (C++ 与 QT)

我正在开发的软件具有以下结构:ClassA:QHashClassB:QHashClassC:QMap>(thisisbecauseIneedtohavetheitemsordered)QHash>(thisexistssoIcanaccessanitemviaid)我的问题是,将要编辑的指针指向数据结构中的元素是否安全。我在尝试调试时遇到错误,其中调试器无法在断点处停止,并且出现SIGTRAP错误,但我不确定这是否与内存问题有关。举一个更好的例子,与我正在开发的软件相关,我有一个QHash表示视频列表。用户一次只能编辑一个视频,所以我有一个指向当前视频的指针,它是哈希中的一个Take。

c++ - vector 乘法中的 SIMD 与 OMP

在我的项目中,我必须做几个vector乘法,在double*a-vectors或float*a-vectors上完成。为了加快速度,我想使用SIMD操作或omp。为了获得最快的结果,我写了一个基准程序:#include#include#include#include#include#include#include#defineSIZE32768#defineROUNDS1e5voidmultiply_singular(float*a,float*b,float*d){for(inti=0;i(t2-t1).count();std::cout(t2-t1).count();std::co

c++ - 如何在 OpenMP 4 中为 std::vector 写入 "target data map"?

我想使用C++和vectors。我有C代码和这样创建的C数组:double*data=(double*)malloc(sizeof(double)*n);double*result=(double*)malloc(sizeof(double)*n);#pragmaomptargetdatamap(tofrom:data[0:n],result[0:n])//loop现在我使用C++vector,我得到:example.cpp:31:41:error:expectedvariablenameoranarrayitem#pragmaomptargetdatamap(tofrom:data[

c++ - reinterpret_cast 指向基类的指针的 vector 的 vector

考虑以下代码#include#include#include#includestructBase{intx;Base(intx):x(x){}};structDerived:publicBase{inty,z;Derived(intx):Base(x),y(x+1),z(x+2){}};voidupdate(conststd::vector>&elements){for(constautoelem:elements){std::coutx>elements(4);{intctr=0;std::generate(begin(elements),end(elements),[&ctr]()

c++ - 将新运算符应用于数组指针的防错方法

在C中,我做int(*ptr)[100];ptr=malloc(sizeof*ptr);//thisistheeasy/errorproofwayofdoingit是否有一种C++方法可以用new运算符做同样的事情int(*ptr)[100];ptr=new__what_comes_here? 最佳答案 int(*ptr)[100];表示ptr是一个指针,它应该保存一个包含100个整数的数组的地址。换句话说,从技术上讲,如果你有,比如:intarr[100];//automatic(compiletimeallocated)obje

C++ vector 复制赋值,调用其元素的哪种复制机制?

我的类A显式实现了它的复制构造函数和复制赋值。复制分配此类元素的vector时使用哪种复制机制?这是:vectora1,a2(5);a1=a2;要对a1的所有新元素使用A的复制构造函数,并将a2的元素作为输入?还是要在a1中为元素腾出空间,然后将A的operator=与的元素一起使用>a2作为输入?如果a1在赋值前不为空怎么办?它甚至被指定了吗?我的类的复制构造函数和operator=不完全做同样的事情(这是不好的做法吗?目前主要是测试内容)。看起来复制构造函数被调用了,但我想知道它是否保证是那样的,或者在这种情况下是否恰好是这样。 最佳答案